<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>899. 有序队列</title>
  </head>
  <body>
    <script>
      //     给定一个字符串 s 和一个整数 k 。你可以从 s 的前 k 个字母中选择一个，并把它加到字符串的末尾。

      // 返回 在应用上述步骤的任意数量的移动后，字典上最小的字符串 。

      //

      // 示例 1：

      // 输入：s = "cba", k = 1
      // 输出："acb"
      // 解释：
      // 在第一步中，我们将第一个字符（“c”）移动到最后，获得字符串 “bac”。
      // 在第二步中，我们将第一个字符（“b”）移动到最后，获得最终结果 “acb”。
      // 示例 2：

      // 输入：s = "baaca", k = 3
      // 输出："aaabc"
      // 解释：
      // 在第一步中，我们将第一个字符（“b”）移动到最后，获得字符串 “aacab”。
      // 在第二步中，我们将第三个字符（“c”）移动到最后，获得最终结果 “aaabc”。

      // 来源：力扣（LeetCode）
      // 链接：https://leetcode.cn/problems/orderly-queue
      // 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

      // 分析
      //       如果k == 1那么就轮换一整轮，找到字典序最小的。
      // 如果k > 1那么就能做到完美升序。
      // 原理是，

      // 只要k > 1就能实现「交换相邻两个字母」。
      // 能实现交换相邻两个字母，就能实现冒泡排序。

      /**
       * @param {string} s
       * @param {number} k
       * @return {string}
       */
      var orderlyQueue = function (s, k) {
        const arr = s.split('')
        if (k === 1) {
          let minStr = s
          let i = 0
          while (i < s.length - 1) {
            arr.push(arr.shift())
            let str = arr.join('')
            const arrStr = [minStr, str]
            arrStr.sort()
            console.log(arrStr)
            minStr = arrStr[0]
            i++
          }
          return minStr
        }
        if (k > 1) {
          arr.sort()
          return arr.join('')
        }
      }
      console.log(orderlyQueue('zazcew', 1))
    </script>
  </body>
</html>
